﻿namespace UglyToad.PdfPig.Tests.Dla
{
    using UglyToad.PdfPig.Core;
    using UglyToad.PdfPig.DocumentLayoutAnalysis;

    public class DistancesTest
    {
        private static readonly DoubleComparer DoubleComparer = new DoubleComparer(0.001);
        private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(0.000001);
        private static readonly PointComparer PointComparer = new PointComparer(DoubleComparer);

        #region data
        public static IEnumerable<object[]> EuclidianData => new[]
        {
            new object[]
            {
                new PdfPoint[] { new PdfPoint(90.24731618468236, 43.62633399359473), new PdfPoint(17.867565576085088, 32.782007019386505) },
                73.18762003020919
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(13.627332330999254, 28.760810187860784), new PdfPoint(28.538521888838975, 6.860016267231284) },
                26.49506271711223
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(83.20241900630643, 30.048081721926245), new PdfPoint(21.050613919520867, 14.275737478929319) },
                64.12186614927377
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(92.74165668368347, 10.60166880206096), new PdfPoint(25.50019785058163, 84.94703259873214) },
                100.24293942250056
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(74.69197005265674, 0.5711367286566627), new PdfPoint(98.68842479477402, 59.382403563089895) },
                63.518461464848066
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(61.799567302485855, 22.60713445056737), new PdfPoint(69.68800242511132, 10.002666105022119) },
                14.869432771888889
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(88.27381018119712, 20.355927229812632), new PdfPoint(51.91217721059409, 12.42297674102737) },
                37.21693237958179
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(9.946350487828582, 96.24071961273519), new PdfPoint(51.20155336677473, 18.573338983915566) },
                87.94437888986967
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(42.301542152342975, 71.0268278467597), new PdfPoint(80.4504756172487, 87.90945935396925) },
                41.71767456508127
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.95911735743669, 22.74415307389599), new PdfPoint(70.62190359768381, 98.23485710771425) },
                81.48038325595083
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(15.943401937436875, 22.53576245617849), new PdfPoint(43.04225532992619, 75.04469166380504) },
                59.08921645883593
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(24.152990800462494, 64.3114455750943), new PdfPoint(44.294468993306566, 19.817062027798972) },
                48.840856985178284
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(47.59045953366275, 13.240845723750505), new PdfPoint(16.885076072066774, 15.297667751552623) },
                30.77419520276207
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(31.373930332993982, 24.45115692077967), new PdfPoint(70.40782520265239, 49.446688270114606) },
                46.35106833861686
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(88.32120049243754, 99.81493006270648), new PdfPoint(97.82614545254702, 81.47516521939245) },
                20.656499054843923
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(93.71954549212276, 55.234799778128384), new PdfPoint(50.06779158577621, 80.3730200804847) },
                50.37266857205443
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(8.73334808529217, 67.19972798998957), new PdfPoint(72.72416222695476, 34.441901201360004) },
                71.88810409536936
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(79.830367302578, 9.526648563088969), new PdfPoint(6.878665033094277, 98.51835165479757) },
                115.0716041566216
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(5.806425575524088, 83.93169607719445), new PdfPoint(88.56126998149352, 43.756118978818336) },
                91.99152823952744
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(37.43763207255889, 73.08296154461291), new PdfPoint(33.4413729503136, 57.205058709610434) },
                16.373084175252643
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(41.361597162194094, 65.73426325987248), new PdfPoint(6.8084552897003, 11.124170302635816) },
                64.62338482359705
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.75927573545114, 16.928446468389634), new PdfPoint(35.27441726089222, 49.83229364362667) },
                61.10117683872149
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(30.200855348008005, 74.79043110034802), new PdfPoint(95.80978993300026, 39.211085961681924) },
                74.63526041941648
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(25.33003573407783, 62.880521872416395), new PdfPoint(1.6705451917022773, 16.96539545382022) },
                51.65239904167498
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(34.34672262867002, 42.592356106882576), new PdfPoint(24.884072231116605, 56.921225819817614) },
                17.17143732471411
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(89.15412704412817, 88.37164183511403), new PdfPoint(32.24873371134047, 28.369922087872702) },
                82.69480130567923
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.6979610201725892, 95.9922092929919), new PdfPoint(49.91245873025015, 40.832278805031784) },
                73.26155690996245
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(48.90824911848486, 65.13487817644688), new PdfPoint(67.48974924537539, 3.1710836677055987) },
                64.68990629833334
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.01916076290532, 71.43956063039772), new PdfPoint(12.771604391474977, 88.93023701541115) },
                31.54136927713634
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(35.53493153839554, 95.27197941751596), new PdfPoint(2.25203272174751, 41.400926327157585) },
                63.32331098974091
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(61.64068343406692, 23.783528785242524), new PdfPoint(77.68625727524413, 11.583231979117414) },
                20.15707523551512
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(70.30906976644967, 1.6843723692948176), new PdfPoint(81.58717227813773, 4.127326855154512) },
                11.539654365886639
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(35.68337931255373, 28.41802941403554), new PdfPoint(95.2404209242609, 59.71568369346354) },
                67.27989572623622
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.74445757391695, 99.71644975081914), new PdfPoint(70.96398334625921, 9.625584109629848) },
                95.34685554033108
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(33.898334948931485, 82.7825409624103), new PdfPoint(73.33986079897382, 50.827163063638444) },
                50.76199501628037
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(26.38908676855435, 19.15840409585945), new PdfPoint(79.56799377408514, 9.373983722285972) },
                54.07153624921056
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(4.997237985523606, 78.27744089700448), new PdfPoint(59.27194112325094, 45.06972335577788) },
                63.62779192291933
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(71.6114238593777, 33.68267014606593), new PdfPoint(9.445719602277213, 67.13435203688017) },
                70.59454516537032
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(19.700099189941444, 29.06218425839088), new PdfPoint(0.5747505456697666, 75.38420837889997) },
                50.114956643560724
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(58.54063193676983, 41.94296650986596), new PdfPoint(42.42348694981069, 42.3583678287077) },
                16.122497349553434
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(17.27398234672155, 26.763957901428782), new PdfPoint(17.629856654704078, 56.57030697641846) },
                29.80847348830899
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(26.704741739583802, 96.5307695578557), new PdfPoint(51.139875585966266, 3.1130453335804664) },
                96.56058701837601
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(80.97308909849835, 12.66996068839984), new PdfPoint(6.347790990980096, 16.738022365996063) },
                74.73609732551395
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(2.733042773877803, 85.46094868883816), new PdfPoint(33.47818064008603, 98.71145031132569) },
                33.478938090382975
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(31.2206484509314, 68.38456425109752), new PdfPoint(88.17262375584501, 0.45503247522938883) },
                88.6450719353319
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(93.02088156942999, 60.99908828891976), new PdfPoint(41.90474685733957, 74.8348089753393) },
                52.95551335618599
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(15.124600788662379, 70.68720338234709), new PdfPoint(3.742125301631316, 39.035370762528764) },
                33.6362788727567
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.134481749810355, 4.168696596047572), new PdfPoint(47.49515391224099, 95.30869770344592) },
                91.52267828721041
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(14.238558714720451, 26.63995786876604), new PdfPoint(10.271140335465113, 50.48739363609522) },
                24.175206333616764
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(60.19767687864217, 31.507288390211585), new PdfPoint(63.22540364896469, 54.95067048104667) },
                23.638089881642614
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(82.47536307247728, 23.852070401207847), new PdfPoint(24.845915091528436, 59.815612436573204) },
                67.93032923752378
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(5.742728826305854, 10.903672462879587), new PdfPoint(29.204847044936677, 21.100674279909203) },
                25.58221720964611
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(3.551670072889057, 14.833377691522553), new PdfPoint(74.34887291197923, 80.8728910714494) },
                96.8166372959566
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(94.19197094248776, 98.1800091084427), new PdfPoint(55.24422709632566, 17.546024652353864) },
                89.54756389746755
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(97.32046530484425, 39.91828413905122), new PdfPoint(73.36550952894059, 3.0216750962359096) },
                43.99090434491953
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(75.30662201059035, 16.227576984011172), new PdfPoint(41.23452001384679, 49.52660040083659) },
                47.64171591148648
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.227995841944237, 36.333203271013204), new PdfPoint(64.57740556223257, 56.78645558747897) },
                58.070593825660026
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(61.8843345601259, 98.90253698002944), new PdfPoint(7.464538114608644, 68.07922474356367) },
                62.542711984676465
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.763720008792854, 59.88290260856495), new PdfPoint(33.26292295943708, 25.305968171820194) },
                41.25261844364819
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(94.50079442689776, 0.8521090400356868), new PdfPoint(33.51973816084174, 55.47829840170898) },
                81.8700787070666
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(22.386725604121438, 50.58310214504864), new PdfPoint(19.497236521021566, 37.40935541896238) },
                13.486910319432761
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.09635767101632, 42.80625865728352), new PdfPoint(39.01248617420825, 43.98355705279392) },
                6.196734938800033
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(26.182628275203346, 94.62747241592761), new PdfPoint(8.360071736282249, 99.59185794913034) },
                18.501044438228664
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(29.97897147246704, 80.08418606709093), new PdfPoint(32.04043118442645, 76.24486477446655) },
                4.357752188001366
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(35.8112901139053, 67.76454909162265), new PdfPoint(61.73679921962242, 51.32758591963669) },
                30.69699953917067
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(9.644780647487405, 73.55059322771153), new PdfPoint(46.05697096179101, 64.727450759043) },
                37.465923804271625
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(81.987078811042, 10.352711104586154), new PdfPoint(91.69622794776302, 88.51146333341543) },
                78.75949547150881
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(92.01315061759333, 27.35699967088153), new PdfPoint(12.07668230534178, 52.095415256010604) },
                83.67692735693724
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(63.61138211234814, 85.19421787134476), new PdfPoint(22.765515898869292, 53.93107729970329) },
                51.437036706361965
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(90.74007025591781, 31.581966767039738), new PdfPoint(37.1124848514539, 86.47293221309077) },
                76.7394032027396
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.72679938841179, 20.980138000591186), new PdfPoint(58.097947880117886, 23.10303240878907) },
                18.49339821592216
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(5.056386645802091, 31.279204232435298), new PdfPoint(76.75600356726612, 38.934105575632586) },
                72.10709106085736
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(71.72428487818497, 53.16820074599994), new PdfPoint(0.8898222526278476, 89.17613290648421) },
                79.46126272546572
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(54.71647740684196, 22.524622848155595), new PdfPoint(37.606136053148866, 61.73707642171146) },
                42.78294399054574
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(42.997364184142796, 28.274287607577374), new PdfPoint(5.852482990006158, 76.40064211716911) },
                60.79381709770679
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(55.285066632631896, 96.37862407767048), new PdfPoint(2.000803550578245, 33.18340213435689) },
                82.66104746893889
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(84.77090973513978, 8.13025899097768), new PdfPoint(15.811882378486652, 97.17863857198556) },
                112.62753375608867
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(17.939326786505116, 35.281822803148756), new PdfPoint(42.3606826157656, 16.42361535611624) },
                30.855058072456572
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(14.568679725909295, 75.38162460991344), new PdfPoint(56.60665118057867, 30.428712898784227) },
                61.54636719849658
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(67.72913939938444, 37.739605602697665), new PdfPoint(88.83780242246732, 54.29301553080329) },
                26.825194032289353
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(65.99152943385094, 29.065217642231623), new PdfPoint(19.248750759536136, 79.17228904177894) },
                68.52449169775221
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(23.014615369743662, 21.541826200519807), new PdfPoint(78.06602159560883, 42.29495596230271) },
                58.83323654495497
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.0855294673421612, 71.01022976841567), new PdfPoint(45.39011236513827, 9.125469029688759) },
                76.1092614432512
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(28.93485823606332, 46.75539001120076), new PdfPoint(89.6713132806724, 1.877796690728084) },
                75.51764928560443
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.59071666295883, 60.65058901026655), new PdfPoint(39.206764132730974, 43.44639574639725) },
                59.90744756582448
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(68.29423794078235, 14.03993514647295), new PdfPoint(6.659410893460061, 87.58301493441265) },
                95.95538801885277
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(91.03885795164902, 4.933753645735561), new PdfPoint(47.43758554074618, 97.06867025844417) },
                101.93092668606779
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(9.988817563057351, 47.791168962377384), new PdfPoint(71.52111441522695, 4.611956350561908) },
                75.17092494894476
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(72.89560859775959, 92.63406809396697), new PdfPoint(55.862241631215284, 14.865554963645945) },
                79.61204195797188
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(92.69901042291939, 25.628532709733577), new PdfPoint(88.88007394261508, 67.22400086739043) },
                41.77041114347864
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(33.05641258924978, 1.6321819899129286), new PdfPoint(50.503160353959366, 72.36201473733382) },
                72.84983354849572
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(14.805520633087566, 60.23990885476642), new PdfPoint(30.63889821579131, 1.350859662558035) },
                60.980455561096
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(34.07870266161323, 88.0794919577899), new PdfPoint(70.28642242911268, 44.44642375209944) },
                56.69959093154205
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(28.106939194873746, 57.32513906188531), new PdfPoint(88.23200994206371, 47.40255953473576) },
                60.93834356812799
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(53.60536047603453, 40.05848957824367), new PdfPoint(54.602584690938485, 23.68515592064754) },
                16.40367371041503
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(95.24374516806434, 77.59835075641364), new PdfPoint(70.90557859705416, 53.93935496858071) },
                33.9425166086272
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(78.3463467754132, 31.083870293342063), new PdfPoint(96.23666352602075, 20.627574083113753) },
                20.721910237068013
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(37.12436686768523, 23.2470996387125), new PdfPoint(52.06498372192044, 52.54754420105103) },
                32.88978691836922
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(14.6211909036702, 76.42782535094904), new PdfPoint(14.874046969748955, 36.414019307054815) },
                40.01460496254509
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(76.43647869323469, 20.677823843278254), new PdfPoint(36.769831469565474, 70.2055187268171) },
                63.45419972266568
            }
        };

        public static IEnumerable<object[]> WeightedEuclideanData => new[]
        {
            new object[]
            {
                new PdfPoint[] { new PdfPoint(43.182404514617176, 53.723843115384454), new PdfPoint(3.3930306043331138, 27.56680709356495) },
                new double[] { 0.34761155125391696, 0.5129726636319278 },
                30.021786400055273
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.84245684124295, 83.51529427574104), new PdfPoint(21.54450118942893, 79.20113290957588) },
                new double[] { 0.7322934909554959, 0.34687568015593506 },
                44.825601158916854
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(37.896653587276106, 4.676038435630514), new PdfPoint(34.9439253392839, 21.638957550046555) },
                new double[] { 0.6701978551153961, 0.12919929786833662 },
                6.558892930575253
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(84.25801042031625, 56.37145462636576), new PdfPoint(50.32376878777948, 6.1361935108459225) },
                new double[] { 0.8796492977302619, 0.5490232080318501 },
                48.97397031018029
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(42.88190299424798, 12.492484242494262), new PdfPoint(24.1625964961651, 79.51406362235376) },
                new double[] { 0.7044908288283627, 0.9936113455894524 },
                68.62985723127218
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(20.602779608772437, 42.46715852270634), new PdfPoint(18.174521592823833, 30.221589235411084) },
                new double[] { 0.2504478432687812, 0.26606251155135485 },
                6.432253030622112
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.51986108860086, 94.46596712749573), new PdfPoint(21.509680804932753, 78.62888698821733) },
                new double[] { 0.15632913198437193, 0.7444124168543208 },
                24.689833816575828
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(51.55252660243651, 8.696156027694924), new PdfPoint(93.18517587899751, 63.04850102014191) },
                new double[] { 0.6049211859542131, 0.9647465182222988 },
                62.4381985575342
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(30.21848335895927, 62.01463223631216), new PdfPoint(9.634525776912728, 27.825583554230782) },
                new double[] { 0.8027978642286271, 0.166726356941435 },
                23.130712209662537
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(65.05762360469711, 32.65631137261622), new PdfPoint(48.01521252147326, 19.98891384302437) },
                new double[] { 0.5240447566021588, 0.024050225750602894 },
                12.492586124209046
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.3293404517169, 19.175633842867423), new PdfPoint(53.271415046061264, 32.89429524681111) },
                new double[] { 0.14421686634792308, 0.5904187520987152 },
                16.392736167902033
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(27.457817853198875, 47.448657769062784), new PdfPoint(71.15889209419977, 85.70061999588773) },
                new double[] { 0.900522855837039, 0.1903068726952547 },
                44.701940217255824
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(64.83866796682987, 79.58165065607992), new PdfPoint(48.13162069138664, 46.40166383877515) },
                new double[] { 0.8714574058833098, 0.9259041071928826 },
                35.53286401086945
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(53.30653375326978, 92.8625736497561), new PdfPoint(82.27493833520515, 24.281678776051695) },
                new double[] { 0.07040920374145287, 0.25354045693115 },
                35.377562641312686
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(88.51627151942432, 6.998984511993955), new PdfPoint(67.87198325112047, 2.7962536590712794) },
                new double[] { 0.32260966005866376, 0.9708895838296442 },
                12.435461283590856
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(36.743038571368224, 59.8337600229277), new PdfPoint(35.64040302194742, 56.3416920424788) },
                new double[] { 0.7374568890684818, 0.35688819825626683 },
                2.2910021521147033
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.27268635494111, 89.09746774627624), new PdfPoint(56.77422246509257, 54.61327497118052) },
                new double[] { 0.795649545331861, 0.33303587511333954 },
                22.38940724547447
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(47.037465271811826, 57.21682538219054), new PdfPoint(56.99273647692446, 32.02947019163149) },
                new double[] { 0.6581356704173641, 0.7394074875314698 },
                23.115111017333888
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(60.964568495488955, 97.45910458584241), new PdfPoint(37.82634706209216, 90.43777343855321) },
                new double[] { 0.7753419138764276, 0.2538662890378435 },
                20.678874022381937
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.507816848536414, 40.089655722905206), new PdfPoint(79.04213533420982, 61.29185593008626) },
                new double[] { 0.4491771104236736, 0.22784032541212518 },
                52.94035981680709
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(36.37910297303968, 18.193555274039262), new PdfPoint(91.15466020166491, 85.85957341341609) },
                new double[] { 0.3052135498189964, 0.3223157143508947 },
                48.90332072146686
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(79.20741576963412, 19.42364609506846), new PdfPoint(1.713066679977826, 53.06873779395372) },
                new double[] { 0.7838549107088932, 0.7535887215850894 },
                74.56808004990535
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(81.51595818963746, 59.30709024627407), new PdfPoint(25.558340164637617, 61.977530710335394) },
                new double[] { 0.8356225471152203, 0.8585263463854019 },
                51.212006983582334
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(85.2932730956128, 20.86191563326203), new PdfPoint(47.682665361201956, 37.66976087735959) },
                new double[] { 0.36214415597915106, 0.3657929461349514 },
                24.811523379570282
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(43.509581169918285, 15.417008065675386), new PdfPoint(65.96527585499304, 39.0153945028804) },
                new double[] { 0.7325993691413879, 0.49827352824887217 },
                25.434223668702632
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.90771181698733, 11.800155130527179), new PdfPoint(22.462360083283073, 41.528647922391535) },
                new double[] { 0.07158506783066576, 0.07037045636842043 },
                8.470510492538954
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(79.27146814563454, 81.68579534396734), new PdfPoint(43.27976627143214, 16.184382141158416) },
                new double[] { 0.9330237425602634, 0.4612023715260829 },
                56.45706548411637
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(81.94084197082734, 73.77559534509864), new PdfPoint(47.6578904565224, 53.105550670184165) },
                new double[] { 0.18776510815355918, 0.4889985502860148 },
                20.7270168208576
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(21.286655400310718, 41.827500093800865), new PdfPoint(30.808244563937627, 13.638275341006922) },
                new double[] { 0.8962456732642891, 0.9264681773667247 },
                28.591184803793016
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(33.78152682660658, 44.158678172468726), new PdfPoint(91.85337130454569, 84.09610553733049) },
                new double[] { 0.3577571791129047, 0.6169322962139128 },
                46.802610761010605
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(3.388201633711907, 42.16103029115421), new PdfPoint(51.9291842681901, 68.48232819729803) },
                new double[] { 0.13974294254511688, 0.5848878568164848 },
                27.101340793929875
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(59.48180649187928, 27.31858623680905), new PdfPoint(64.63020023464131, 65.24882836977916) },
                new double[] { 0.27611650351633377, 0.7662781290683103 },
                33.3131442702799
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(70.75991343495718, 65.50017099660197), new PdfPoint(15.609933830591839, 22.902302945831778) },
                new double[] { 0.07987531560885708, 0.01399300188637742 },
                16.38089705655407
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(31.94473221745361, 18.61692538519876), new PdfPoint(61.552148192348454, 85.83227867776296) },
                new double[] { 0.7613870121579395, 0.07308377684838896 },
                31.58506960716091
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.84364167933228, 40.37547892038721), new PdfPoint(42.61282689436702, 60.929761375074484) },
                new double[] { 0.5517337470063279, 0.30404253201779463 },
                11.584926783250198
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(30.609097319810495, 36.22011355077181), new PdfPoint(53.58065145816467, 88.58342084286058) },
                new double[] { 0.6165613403167299, 0.20275705975402813 },
                29.686655044030037
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(11.220454019745107, 74.6916587063666), new PdfPoint(93.47534180341599, 85.14870589995813) },
                new double[] { 0.9348214454710079, 0.5363851826580573 },
                79.89700115316103
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(31.718504984864772, 30.40590697044462), new PdfPoint(53.90080251769821, 82.05587152527684) },
                new double[] { 0.4571100445160645, 0.6331364176024251 },
                43.74874766734203
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(99.47163562093412, 39.154096812266495), new PdfPoint(91.66424523421138, 59.168541158275445) },
                new double[] { 0.17586135910540956, 0.6302336451850356 },
                16.22274365925583
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(20.2135535460801, 49.53638586834629), new PdfPoint(24.945975209291383, 82.22842470861112) },
                new double[] { 0.36044759383738423, 0.9561252186963417 },
                32.09283249022183
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(98.02805681886497, 86.73209614140276), new PdfPoint(32.07674808646165, 36.59014734535081) },
                new double[] { 0.9484803625034408, 0.08838534995731318 },
                65.93713949741122
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(27.996973786675994, 79.43572326933925), new PdfPoint(48.25779290166763, 86.18181497796209) },
                new double[] { 0.5742969026258793, 0.25695045329675903 },
                15.730323730554423
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.87713820990285, 22.328033311776963), new PdfPoint(29.742202859774903, 38.736886174518524) },
                new double[] { 0.4800858147342638, 0.9759086919892536 },
                49.260109760197736
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.92934825367855, 98.9884076287911), new PdfPoint(65.42567095847741, 47.35379914182888) },
                new double[] { 0.4648383061572542, 0.1441282662065675 },
                29.079350087166517
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(93.33554919357977, 75.29050666168905), new PdfPoint(6.126451600544447, 99.95703145897636) },
                new double[] { 0.7942724709681851, 0.63177107789588 },
                80.15718458738291
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.046802362461634, 67.06455121914985), new PdfPoint(76.17903106915162, 17.156092843185366) },
                new double[] { 0.4280532393348885, 0.14861674977777017 },
                30.990054782588523
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(62.3272593947105, 35.79012414739397), new PdfPoint(52.36533842332707, 13.901621776517592) },
                new double[] { 0.5735026857973633, 0.7097396162613753 },
                19.92373510914352
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.56524839698827, 10.74765517726165), new PdfPoint(37.50854890574746, 84.37760856549112) },
                new double[] { 0.8105297727958675, 0.5885192616865264 },
                71.70194579237302
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(83.11377683515076, 57.43005087066818), new PdfPoint(16.558647937431214, 58.38401772597568) },
                new double[] { 0.017140370145589, 0.1964493377625991 },
                8.723732508695852
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(16.488235471535685, 40.94309362090976), new PdfPoint(88.4046043115408, 8.886895070245703) },
                new double[] { 0.3281424394347694, 0.19534658386139647 },
                43.56465358623818
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(69.33173897868781, 28.049681151606897), new PdfPoint(45.87984620672392, 18.086487563732057) },
                new double[] { 0.05481260678513333, 0.6996745919523291 },
                9.979970555783801
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(97.8075655925026, 71.63920731673262), new PdfPoint(82.38832209559578, 20.420358571629926) },
                new double[] { 0.8974765130568136, 0.7987431260463899 },
                48.04973385624452
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(74.71035113361695, 75.51638203372252), new PdfPoint(43.77741495534478, 26.454397399213313) },
                new double[] { 0.3440636846460098, 0.5730780865363092 },
                41.3359406993389
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(99.39149571037454, 73.66374283672987), new PdfPoint(30.431764865427947, 33.888233811011084) },
                new double[] { 0.2290467159991193, 0.16317869418005349 },
                36.70670924504519
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.06004646773668, 45.650788538214215), new PdfPoint(75.42365997141293, 14.096288747659669) },
                new double[] { 0.9955744626531466, 0.4647882510799719 },
                29.778501528755687
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(56.748659378234024, 41.242955268359495), new PdfPoint(51.98993301466416, 29.860385112946396) },
                new double[] { 0.24021000881512644, 0.06280491528900067 },
                3.6846787246051296
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(75.57831346578048, 26.27036380630895), new PdfPoint(41.38295951936305, 10.493842391270958) },
                new double[] { 0.2789045533941795, 0.8108096359388034 },
                22.97691669213719
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.537425706690676, 56.75977724131729), new PdfPoint(57.34054617848201, 25.281082417225743) },
                new double[] { 0.21918206031913, 0.6656671173061652 },
                36.63530244095203
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(11.433060804657625, 30.136723941098076), new PdfPoint(39.114232902337285, 41.693047526138315) },
                new double[] { 0.7075215906513742, 0.9492376684195137 },
                25.863214731926572
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(43.64828975090095, 27.61162115836622), new PdfPoint(52.04562591714949, 33.62242974074901) },
                new double[] { 0.7824315482189858, 0.8918957453363134 },
                9.348657254989888
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(23.197228709051878, 39.70165900394454), new PdfPoint(21.658622967356898, 62.932955382463284) },
                new double[] { 0.7123270820911787, 0.7608269156404319 },
                20.30515594401933
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(38.80334105174317, 61.511545901749884), new PdfPoint(75.10648035017779, 7.295425670384659) },
                new double[] { 0.3539712178141595, 0.8773494800670871 },
                55.18491892060525
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.1688237126947, 41.23592471915518), new PdfPoint(43.52192786093527, 53.110058660378854) },
                new double[] { 0.9100573901478963, 0.5044492428043307 },
                29.512866121285597
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(82.08392928322395, 64.31087019408514), new PdfPoint(52.31323534174951, 43.415348377568854) },
                new double[] { 0.6121048691093244, 0.5323855644175843 },
                27.838044094299097
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.3913840705588, 62.415163965439255), new PdfPoint(35.23200419347637, 39.60080175738051) },
                new double[] { 0.8123349145153583, 0.5103113080736199 },
                57.48155112015711
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(95.55194605557199, 61.274878987700795), new PdfPoint(9.872303067845213, 53.109186496315075) },
                new double[] { 0.39994849610514704, 0.26644552003519284 },
                54.34876811370422
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(58.16454587655691, 44.27103201840323), new PdfPoint(52.61148819933717, 73.16051536895833) },
                new double[] { 0.3242204809496424, 0.9399593671029692 },
                28.186699160566924
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(39.27230354280464, 69.96392894332428), new PdfPoint(93.64288221720275, 90.8813285250839) },
                new double[] { 0.4317159521750946, 0.8385660327916159 },
                40.53548479594234
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(6.028218612921766, 92.28249711944844), new PdfPoint(86.89444144782719, 78.01785402333229) },
                new double[] { 0.4431516292387626, 0.9581597807478263 },
                55.61374133395936
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(54.92130401827322, 28.99378253456821), new PdfPoint(45.13742719746163, 97.30730475503564) },
                new double[] { 0.3188223355004387, 0.4883276449080678 },
                48.0563822144909
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(32.268018901069375, 81.41851836473141), new PdfPoint(54.35752358235123, 62.540609603883446) },
                new double[] { 0.9101580338420697, 0.4705514663118632 },
                24.734614511025498
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(31.037882065791024, 17.256315605621918), new PdfPoint(47.55823563431243, 2.2242251754150177) },
                new double[] { 0.7389893743229036, 0.23508100924751485 },
                15.962653392377986
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(92.96545041274639, 36.46317576752287), new PdfPoint(66.29677256321442, 40.476874876792365) },
                new double[] { 0.9664552610357512, 0.9626933061840279 },
                26.51168650401405
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.84188613970119, 3.1208787873849397), new PdfPoint(17.2478922108122, 82.58378940577553) },
                new double[] { 0.6287766378079861, 0.5994653351929345 },
                76.1520363923115
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(98.39672235266586, 42.0282093451268), new PdfPoint(38.763299356806705, 93.87681792398747) },
                new double[] { 0.07567394716307108, 0.7207771225254921 },
                46.97613195199875
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(8.143995444811425, 92.19425274899163), new PdfPoint(8.609680795960728, 74.31465214379264) },
                new double[] { 0.15953027992806146, 0.4736707695874741 },
                12.306816144372634
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(58.93506339562141, 44.66757692409396), new PdfPoint(97.7398163873153, 86.6502417018157) },
                new double[] { 0.8611067206485159, 0.6225551836351352 },
                48.927937997850314
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.26166589388102, 6.546023931685174), new PdfPoint(28.95707478012117, 99.20905396483187) },
                new double[] { 0.24865152341237784, 0.24053974978478188 },
                46.16796383017308
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(70.99184698481156, 80.59925379881058), new PdfPoint(56.518278661882725, 11.376940939895363) },
                new double[] { 0.17499915074250705, 0.8582859081058546 },
                64.41531405130326
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(87.92692991588102, 53.75036538525363), new PdfPoint(97.96468827019336, 82.52208094062715) },
                new double[] { 0.8777134351973265, 0.2536327348702676 },
                17.274129190515396
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(99.4822062406802, 41.54148333815147), new PdfPoint(84.45518423651059, 73.14559728174417) },
                new double[] { 0.2828264200544862, 0.4469922959708781 },
                22.59049092668876
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(41.854572656507635, 64.98871464159075), new PdfPoint(31.81558499096202, 74.32583651758068) },
                new double[] { 0.8515073901292015, 0.99948840666966 },
                13.151168857557241
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(59.72389163510703, 96.65882084095013), new PdfPoint(77.10913600860067, 99.18003822649447) },
                new double[] { 0.3433737659164865, 0.49972290664880603 },
                10.342151726893803
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(25.302637359422995, 29.383813066648823), new PdfPoint(52.84587115642042, 78.52696918658933) },
                new double[] { 0.16534574750091358, 0.6870580040611346 },
                42.24589317594554
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(3.888063677940168, 54.17714114090026), new PdfPoint(68.29615810533683, 71.47289764474036) },
                new double[] { 0.3299097164348803, 0.8923490679059086 },
                40.441791306327595
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(99.1556919505891, 94.29753952039171), new PdfPoint(62.64512115426586, 31.430970740223618) },
                new double[] { 0.8764364704320418, 0.6481879083477506 },
                61.07438661865755
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(24.151166818575387, 19.873799356329247), new PdfPoint(77.31241363620555, 38.85347022662117) },
                new double[] { 0.43390749253426086, 0.5391618844284266 },
                37.68945479322134
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(28.205228648784242, 40.108163919266026), new PdfPoint(81.53642059740082, 9.913005005183795) },
                new double[] { 0.8451744812906116, 0.1437359576718935 },
                50.34788703961236
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(4.936395350784939, 48.84566277072055), new PdfPoint(50.964991419966324, 84.46292302345998) },
                new double[] { 0.6757301675748483, 0.9337792720061786 },
                51.14885775576711
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(43.00419938151381, 55.722441846185724), new PdfPoint(52.59589412614377, 2.134052686672183) },
                new double[] { 0.5219345274582874, 0.0820582932792513 },
                16.84239777271094
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(20.32950409621951, 31.473426807364923), new PdfPoint(47.49011085352349, 56.424964496227545) },
                new double[] { 0.522628856472827, 0.5721287022118767 },
                27.2348674158037
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(12.748778536668759, 80.53171919654852), new PdfPoint(81.09071363503946, 5.9381022469796925) },
                new double[] { 0.9498311861704639, 0.2395137114284972 },
                75.95396407019084
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(76.17319208657186, 24.93618462546461), new PdfPoint(53.10025668713026, 60.531394169345084) },
                new double[] { 0.5357720219288672, 0.3133763715777024 },
                26.120443696969353
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(98.08523728603436, 82.83746783458766), new PdfPoint(47.42113535042345, 85.43736133423441) },
                new double[] { 0.9718208273404012, 0.08135490934244416 },
                49.95066961729753
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.05460100017014, 17.86227799168675), new PdfPoint(2.9476106233295885, 3.8389896321498806) },
                new double[] { 0.5611866839253695, 0.6510610772614032 },
                33.51143224165087
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(82.92981278777084, 21.606190512021193), new PdfPoint(73.80999399467322, 66.72858006205608) },
                new double[] { 0.694908737255397, 0.581436723876394 },
                35.23661385399278
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(51.78980370685202, 22.553400313471073), new PdfPoint(68.63345256693609, 69.21110605564596) },
                new double[] { 0.30368246359588835, 0.4197625427272158 },
                31.622077728766158
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(66.16195959298788, 38.1986525964413), new PdfPoint(82.12093549745403, 45.63167431616989) },
                new double[] { 0.030744473029656327, 0.7112830100965338 },
                6.8650221331738726
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(29.288330144353804, 19.90152686683585), new PdfPoint(22.641284657060712, 47.999168607785734) },
                new double[] { 0.8179673989239096, 0.6017524346962801 },
                22.609962825026148
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(30.8089632790534, 73.10830509824271), new PdfPoint(72.36655811605044, 4.345586689033343) },
                new double[] { 0.7367304229916434, 0.0627969405162665 },
                39.61416100814953
            }
        };

        public static IEnumerable<object[]> ManhattanData => new[]
        {
            new object[]
            {
                new PdfPoint[] { new PdfPoint(98.31028086405155, 71.41286167359823), new PdfPoint(8.520494388407762, 24.459081332221732) },
                136.74356681702028
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(80.37553666527263, 42.56431739855909), new PdfPoint(64.8412084956269, 16.95362776630095) },
                41.145017801903876
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(49.2710512585456, 70.34544328514963), new PdfPoint(24.232351348255964, 11.265059118847509) },
                84.11908407659175
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(81.09400141846052, 47.012739518606516), new PdfPoint(42.024248186489864, 69.61568059464469) },
                61.67269430800883
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(44.06154700294406, 48.15601389227875), new PdfPoint(49.1600051021766, 82.21859339802802) },
                39.16103760498181
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(28.096097449045697, 95.00013087149667), new PdfPoint(76.29039997438234, 12.28736104914525) },
                130.90707234768806
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(50.30487767979175, 8.940072323128835), new PdfPoint(92.67843980278924, 75.96533282615546) },
                109.39882262602413
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(19.00779863367599, 75.60440570810721), new PdfPoint(21.298939307878793, 93.42357987787084) },
                20.11031484396643
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(71.56810305931288, 3.3973375701299213), new PdfPoint(29.815286790846287, 95.16472908385313) },
                133.5202077821898
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(8.25344818567222, 21.56716192469692), new PdfPoint(58.866686040068686, 52.18035094748926) },
                81.2264268771888
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(66.15541572742991, 56.76631788862886), new PdfPoint(1.7397342748868394, 34.59904891883436) },
                86.58295042233757
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(91.66699176741876, 96.3298342377653), new PdfPoint(58.64041524782142, 6.2232580885963955) },
                123.13315266876624
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(63.03154450804016, 32.991747619710644), new PdfPoint(88.82698809362523, 15.286720923988184) },
                43.50047028130753
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(64.53015535414762, 48.298513693111275), new PdfPoint(77.6915403251356, 96.91573666739748) },
                61.77860794527419
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(94.72526480912629, 99.38354629751768), new PdfPoint(56.53130742487021, 2.627492785615504) },
                134.95001089615826
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(85.33671538059849, 15.43698113995412), new PdfPoint(8.275747510014142, 94.20156307009307) },
                155.8255498007233
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(66.31421796006745, 17.98612509501162), new PdfPoint(33.49021795975978, 89.0085205254106) },
                103.84639543070665
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(25.883150352077333, 72.86865690119674), new PdfPoint(17.716996713814346, 23.509304073508307) },
                57.52550646595142
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(93.10705872855762, 22.843093894278432), new PdfPoint(98.79790933808064, 63.563193569778676) },
                46.41095028502327
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(90.5408621130074, 39.05170368329062), new PdfPoint(79.77879954605899, 29.19423450160433) },
                20.619531748634703
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(55.69449971207353, 30.302336366651485), new PdfPoint(55.65748725723053, 1.8619998585335695) },
                28.477348962960917
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(44.1570320002465, 59.307531272875345), new PdfPoint(93.10814668116721, 93.56027945305176) },
                83.20386286109712
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(12.40100846740917, 78.17666856600684), new PdfPoint(0.19483289745906296, 68.54746682975302) },
                21.835377306203924
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(87.92709928843715, 13.04278008523495), new PdfPoint(62.65280973153951, 92.49487197056806) },
                104.72638144223075
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.52459326755739, 40.69324143514436), new PdfPoint(51.04163579452188, 51.66808508490045) },
                46.4578011227916
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(33.51298944432207, 25.830636646057158), new PdfPoint(75.46518151064959, 91.35549704177652) },
                107.47705246204687
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(88.1400886561084, 4.125788739590696), new PdfPoint(85.30148662356203, 60.58608035065932) },
                59.298893643615
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.0905749031125178, 52.30615532376073), new PdfPoint(2.2476727003424735, 44.91822420411289) },
                8.545028916877794
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(53.369769201982386, 94.64770581346322), new PdfPoint(88.73651176910599, 55.8282338810349) },
                74.18621449955192
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.6626858904726038, 81.2969472428702), new PdfPoint(70.82237199630096, 9.236767238355803) },
                141.21986611034276
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(57.088540008052966, 82.46248802199958), new PdfPoint(40.94992621459188, 63.502813662388114) },
                35.098288153072545
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(80.91019339604507, 54.3952636017656), new PdfPoint(39.91091192753484, 69.33585170549613) },
                55.93986957224076
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(91.03067247042856, 91.65920893476488), new PdfPoint(42.90216685491273, 95.4786928780688) },
                51.94798955881975
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(50.881652494506014, 27.765384050931306), new PdfPoint(38.3895657106228, 28.724018523900853) },
                13.450721256852763
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(4.5674474817646304, 74.0031061768295), new PdfPoint(25.92660362771575, 9.49670464961997) },
                85.86555767316065
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(84.04454050797084, 53.51864481339068), new PdfPoint(56.01428239109764, 49.93745673695585) },
                31.611446193308026
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(56.46046026934914, 75.11421058387852), new PdfPoint(6.19920566697335, 8.979165930736555) },
                116.39629925551776
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(64.98307759950606, 71.45233437781435), new PdfPoint(52.04911042086551, 66.2948985640898) },
                18.091402992365097
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(54.80513188587884, 25.69697229513448), new PdfPoint(30.29444892930152, 16.230108067035896) },
                33.977547184675906
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(16.51591077595017, 95.4787158857551), new PdfPoint(71.65804430221002, 83.2192924296896) },
                67.40155698232533
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(90.73455704858245, 14.238466564905817), new PdfPoint(7.465435482794525, 61.28735510279184) },
                130.31801010367394
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(6.786258211158902, 67.05366021450293), new PdfPoint(75.42028126667847, 87.33454969863855) },
                88.9149125396552
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(37.5733959145657, 34.669875274927655), new PdfPoint(30.517320037944096, 39.41900581115182) },
                11.80520641284577
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(24.711028083392993, 93.47175488320937), new PdfPoint(5.960767657165822, 12.657645959606755) },
                99.56436934982979
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(55.98960481262034, 42.200096959815255), new PdfPoint(84.32769129720324, 59.41113079827088) },
                45.54912032303853
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(84.08976116221814, 42.52501081331095), new PdfPoint(98.54783334258454, 46.76793772899147) },
                18.70099909604692
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(95.45641575782206, 78.68740199253257), new PdfPoint(78.59999655555782, 74.61511155500692) },
                20.928709639789886
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(48.46555875014703, 86.4559814348131), new PdfPoint(56.388582424222676, 5.019193688707546) },
                89.35981142018119
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(64.98900033439119, 0.45808817226621334), new PdfPoint(34.887817180687605, 28.702483842178907) },
                58.34557882361628
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(5.342552428587988, 97.40665691301854), new PdfPoint(38.365708837054136, 68.39275410900449) },
                62.0370592124802
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(52.06884475498755, 63.55088286341204), new PdfPoint(64.42078065774773, 40.718370243553025) },
                35.18444852261919
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.76090851050823, 67.41778011667391), new PdfPoint(23.32457269196241, 43.587768765511456) },
                74.26634716970827
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(5.591360946408807, 61.658705090162556), new PdfPoint(85.04514260969314, 98.51912430813375) },
                116.31420088125553
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(91.44599149697437, 4.2030317490844515), new PdfPoint(45.9823591113872, 27.221621768937965) },
                68.4822224054407
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(75.66227474950094, 92.35130522949882), new PdfPoint(37.0797185021092, 21.561016386419773) },
                109.37284509047079
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(59.83690079991539, 88.13825027782673), new PdfPoint(98.87135070597783, 94.4622090803936) },
                45.35840870862932
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(50.578296766998776, 12.226595426147968), new PdfPoint(97.57998848317094, 88.08860181253041) },
                122.86369810255461
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(82.69023235389898, 33.342852652558484), new PdfPoint(4.4999792001447325, 83.18876811351126) },
                128.036168614707
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(50.88188971008082, 27.13272267263055), new PdfPoint(50.07636306820354, 42.97256140722085) },
                16.64536537646758
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(35.961515310664375, 13.815103097310633), new PdfPoint(91.39132063877125, 5.8702991535304445) },
                63.37460927188706
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(71.97608210414027, 90.68282411111058), new PdfPoint(53.05902965075383, 59.17726933937338) },
                50.42260722512364
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(45.34252873870223, 69.95951070281912), new PdfPoint(97.1680023177814, 10.423570724792263) },
                111.36141355710603
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(11.563630954307058, 86.73137084909389), new PdfPoint(88.3320100428436, 12.946634014881319) },
                150.5531159227491
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(30.95920769838655, 55.339956750703415), new PdfPoint(66.49353560719601, 21.089794614270463) },
                69.7844900452424
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(54.1424467040507, 3.0125185468788285), new PdfPoint(29.247728849084854, 25.304748551013112) },
                47.18694785910013
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(51.50831652035066, 50.23460729031534), new PdfPoint(57.26868796565141, 18.65130989920575) },
                37.34366883641034
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(21.945495456598085, 21.772555866972898), new PdfPoint(54.15236426981463, 64.3348399112023) },
                74.76915285744595
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(80.00390615586804, 49.76978885900284), new PdfPoint(62.96191944559156, 65.33303380922983) },
                32.60523166050347
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.188088699998321, 91.18895717313092), new PdfPoint(66.30336158408379, 75.93431307788818) },
                71.36991697932821
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(73.13683786985845, 99.17695858310161), new PdfPoint(66.4231872188596, 19.178939031026545) },
                86.71167020307392
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(62.642697350844834, 15.05748097346611), new PdfPoint(51.78518710107176, 43.062539006082524) },
                38.86256828238949
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(97.91524189555085, 53.36239931242955), new PdfPoint(8.477424740647743, 95.8479188914125) },
                131.92333673388606
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(55.49741452385234, 44.37960024756884), new PdfPoint(82.73206152999416, 32.90646336432002) },
                38.70778388939063
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(23.347808381194035, 87.6853785894334), new PdfPoint(12.996014764926866, 34.68326153268328) },
                63.35391067301728
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(61.89329522120652, 57.17171642780339), new PdfPoint(60.49416471162344, 65.19149311226427) },
                9.41890719404396
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(27.373292399099014, 28.886477956386326), new PdfPoint(10.292743873112897, 36.070288354645506) },
                24.264358924245297
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(51.025958488711765, 65.33221184908226), new PdfPoint(32.615609870031626, 53.69382959071294) },
                30.048730877049458
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(50.96820053822875, 73.90554053213604), new PdfPoint(72.67650861487111, 60.68253348417889) },
                34.931315124599514
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(25.74092217712167, 41.284067672651915), new PdfPoint(6.925901260561074, 82.99278467455069) },
                60.523737918459375
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(67.43659906411821, 23.4560458202423), new PdfPoint(82.90858445505333, 45.533238869798176) },
                37.54917844049099
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(1.7436563737518451, 89.61930761116818), new PdfPoint(45.42878811213147, 94.40805586130807) },
                48.47387998851951
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(47.518364996013915, 94.35923908826759), new PdfPoint(82.6875958678608, 83.60796256931705) },
                45.92050739079741
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(93.1111147556186, 74.67435782885174), new PdfPoint(9.220159612167611, 1.92327440548421) },
                156.64203856681854
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(58.761888058008324, 74.31086798688808), new PdfPoint(73.29868519238025, 93.3793461376124) },
                33.60527528509624
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(82.1414588955533, 72.66028694542108), new PdfPoint(22.105273227578614, 3.763140051025915) },
                128.93333256236986
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.46511935470944, 35.72164214235971), new PdfPoint(25.227524405843937, 31.255680447799516) },
                65.7035566434257
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(71.56340245351811, 33.06200911987518), new PdfPoint(61.56092351253598, 35.25061168887491) },
                12.191081509981863
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(94.85037789634605, 46.11142621381378), new PdfPoint(83.23022768218932, 44.95580926601661) },
                12.775767161953894
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(86.54789013633707, 62.18067734306021), new PdfPoint(81.67442285514242, 65.21616696640878) },
                7.908956904543217
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(9.471106833299793, 41.284563469094714), new PdfPoint(37.652618741738344, 88.08276418618436) },
                74.97971262552821
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(74.33947490467499, 21.349171610958805), new PdfPoint(36.95263538216007, 90.58723563734458) },
                106.62490354890069
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(78.98656364939777, 68.0250617210901), new PdfPoint(85.03683096885037, 57.80499382871557) },
                16.27033521182713
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(85.71438334952354, 93.8429462465407), new PdfPoint(70.15969889240748, 21.1362364898653) },
                88.26139421379148
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(41.57742052603941, 88.68540869219946), new PdfPoint(78.08634596682104, 40.34395101451887) },
                84.85038311846222
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(96.49424108681877, 26.448955532356276), new PdfPoint(23.194916947717637, 7.288119213103073) },
                92.46016045835435
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(27.39120214213613, 32.72675758567733), new PdfPoint(87.35579544468504, 39.87980542599764) },
                67.11764114286922
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.525329230026426, 20.086942634243478), new PdfPoint(31.567701881100497, 11.164253270854662) },
                29.965062014462887
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(62.70226199104806, 73.0988038163783), new PdfPoint(65.86893962458483, 68.00541347247822) },
                8.260067977436833
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(10.505543038484245, 75.59518396483298), new PdfPoint(5.23969310754564, 76.76053964047921) },
                6.43120560658483
            },
            new object[]
            {
                new PdfPoint[] { new PdfPoint(21.534176925749893, 23.127039946195936), new PdfPoint(10.172323325460287, 12.335644203864248) },
                22.153249342621294
            }
        };

        public static IEnumerable<object[]> MinimumEditDistanceData => new[]
        {
            new object[]
            {
                new string[] { "Z3s5m6oqk6", "KLPEcPp" },
                10
            },
            new object[]
            {
                new string[] { "GUbBY", "6HSAoFTQG" },
                9
            },
            new object[]
            {
                new string[] { "woC277mh", "eb8V0lrH" },
                8
            },
            new object[]
            {
                new string[] { "x0IZH", "zuUbWxEnbCs" },
                10
            },
            new object[]
            {
                new string[] { "ZfKKXdp", "eIzHt" },
                7
            },
            new object[]
            {
                new string[] { "bIDDOS", "iYOEovRn" },
                8
            },
            new object[]
            {
                new string[] { "cfHptoT3pEw3", "ry2pk1oGmX2C" },
                11
            },
            new object[]
            {
                new string[] { "d1uUHMfZOG", "UE5ViSu" },
                9
            },
            new object[]
            {
                new string[] { "jyFMb0iB", "KliI4F" },
                8
            },
            new object[]
            {
                new string[] { "mYglaOe1KP1r", "tC42ap" },
                11
            },
            new object[]
            {
                new string[] { "AhV8bFw6MfN9vV", "4voRvizWl" },
                14
            },
            new object[]
            {
                new string[] { "CLHhvEWqVDnB", "mnKRw" },
                12
            },
            new object[]
            {
                new string[] { "IscuqMU", "l8S" },
                7
            },
            new object[]
            {
                new string[] { "qMuzOgbQt8bj", "VPhne7U0cyRNa" },
                13
            },
            new object[]
            {
                new string[] { "rbCKBc1LFcGj", "Br5TZhBE" },
                11
            },
            new object[]
            {
                new string[] { "Bqb", "VUsZJCpUnyX8p" },
                13
            },
            new object[]
            {
                new string[] { "nJu7IIKzd", "OmTR" },
                9
            },
            new object[]
            {
                new string[] { "ooxo", "HVAccKsc4" },
                9
            },
            new object[]
            {
                new string[] { "lv0", "Z0ZNpJ96G" },
                9
            },
            new object[]
            {
                new string[] { "fiyQ2sSF", "v6iw" },
                8
            },
            new object[]
            {
                new string[] { "4N6ITKcXp", "v7xW9W" },
                9
            },
            new object[]
            {
                new string[] { "xhcpSZESbsugNT", "hzosTTb" },
                12
            },
            new object[]
            {
                new string[] { "EVgAJxbsSSxQZk", "XOuKXtaq" },
                14
            },
            new object[]
            {
                new string[] { "B1XR5NyS", "6bjWJ5sdfHr3" },
                11
            },
            new object[]
            {
                new string[] { "Qem1OzsMTvT8k", "x1OVG3dcL" },
                11
            },
            new object[]
            {
                new string[] { "y6z1C", "via" },
                5
            },
            new object[]
            {
                new string[] { "7LYRUcR10sO", "vf8H" },
                11
            },
            new object[]
            {
                new string[] { "g9yzib4qCn", "ZV13wOEzdkG" },
                11
            },
            new object[]
            {
                new string[] { "fyx8CSRZBrkZYX", "gtp2Di6Ouyia1t" },
                14
            },
            new object[]
            {
                new string[] { "wlK1cAQ7Ulm6N", "U2ibeDS" },
                13
            },
            new object[]
            {
                new string[] { "eaRHq0C7", "NyiDzGPBlJ" },
                10
            },
            new object[]
            {
                new string[] { "ANKO0", "Op6U1a6yyv" },
                10
            },
            new object[]
            {
                new string[] { "CBYnnb", "BYq3C" },
                4
            },
            new object[]
            {
                new string[] { "7Vv6r4", "bD0Vtuy14" },
                7
            },
            new object[]
            {
                new string[] { "Xd2UCrxXUtTc", "j5ChvLsO9c8g" },
                12
            },
            new object[]
            {
                new string[] { "bRCyFTKkEn5", "n9PUYjmj" },
                11
            },
            new object[]
            {
                new string[] { "45iPgzqb9hdOt", "FtFas" },
                13
            },
            new object[]
            {
                new string[] { "TRwZZco16BK306", "0XInOMMGx22Zg" },
                14
            },
            new object[]
            {
                new string[] { "rEl1P4vdeadl", "wnZQ2" },
                12
            },
            new object[]
            {
                new string[] { "qvl9jo", "08V0I0OxYHn" },
                11
            },
            new object[]
            {
                new string[] { "eTB1zjUc", "CzmBBtqSki" },
                9
            },
            new object[]
            {
                new string[] { "laU", "RJC1Mz3NT" },
                9
            },
            new object[]
            {
                new string[] { "DRlZXjpeshNq5l", "mkLQdXrES8" },
                14
            },
            new object[]
            {
                new string[] { "B9woVuWF5P5", "C7O" },
                11
            },
            new object[]
            {
                new string[] { "eA5", "gBfiKu" },
                6
            },
            new object[]
            {
                new string[] { "a4OIKcx8prUU4A", "75PrmwrFAIxju" },
                14
            },
            new object[]
            {
                new string[] { "nOH9d", "OvE8yYnRuuDc6" },
                12
            },
            new object[]
            {
                new string[] { "794HCdIq1aZq7F", "L2jQFw" },
                14
            },
            new object[]
            {
                new string[] { "2HVM5IBeSRD", "9w1Ov0HXajxl" },
                12
            },
            new object[]
            {
                new string[] { "EMKB", "NtcNFmn" },
                7
            },
            new object[]
            {
                new string[] { "7EjPg9IZVds3no", "eVqST" },
                13
            },
            new object[]
            {
                new string[] { "EBbVk46ihD", "0dKvkrlf4" },
                9
            },
            new object[]
            {
                new string[] { "tKnKi", "Wf8yN" },
                5
            },
            new object[]
            {
                new string[] { "Mr6LGdc3", "uQENO1" },
                8
            },
            new object[]
            {
                new string[] { "uND5m", "TWOXOArcic" },
                10
            },
            new object[]
            {
                new string[] { "LrCcPCRtZ", "Kw17" },
                9
            },
            new object[]
            {
                new string[] { "syREw7QRE", "rmKfH7" },
                8
            },
            new object[]
            {
                new string[] { "kk0p4", "FIAUGApDjcH" },
                10
            },
            new object[]
            {
                new string[] { "SAknj5", "MurNYeqhG" },
                9
            },
            new object[]
            {
                new string[] { "IWlrcCtHF9nGAf", "I5L" },
                13
            },
            new object[]
            {
                new string[] { "Us2V", "SbyDkKQsL" },
                9
            },
            new object[]
            {
                new string[] { "AQueooT9VF", "Sgi1l8" },
                10
            },
            new object[]
            {
                new string[] { "oSbE8y9w7Wm", "780UU" },
                10
            },
            new object[]
            {
                new string[] { "F0WqwhGiN8ErKu", "epq" },
                13
            },
            new object[]
            {
                new string[] { "CDo549T", "gTGBTj" },
                7
            },
            new object[]
            {
                new string[] { "xeQsm447DXXq", "aTqlElz" },
                12
            },
            new object[]
            {
                new string[] { "XORSGJAJf3J", "9FVjNLSa" },
                11
            },
            new object[]
            {
                new string[] { "hSWlP", "mi8" },
                5
            },
            new object[]
            {
                new string[] { "FtHCl8Dvi", "xZd3sKv" },
                8
            },
            new object[]
            {
                new string[] { "TIpyP9eeDvbyTw", "M5R9U5" },
                13
            },
            new object[]
            {
                new string[] { "ZzRqRqYW7QYuk1", "SavA6lLOit8Sy" },
                14
            },
            new object[]
            {
                new string[] { "XTF", "6p9" },
                3
            },
            new object[]
            {
                new string[] { "WDjD", "NdYfRf2GP2tKF9" },
                14
            },
            new object[]
            {
                new string[] { "uq9esED2QOaKJ", "tCqtupjk8wQIyh" },
                13
            },
            new object[]
            {
                new string[] { "tHtjoVqmTutOfq", "vEv8z" },
                14
            },
            new object[]
            {
                new string[] { "X7ZGzZuQJ3yta", "UPUmpyC" },
                12
            },
            new object[]
            {
                new string[] { "5nMhWh45", "9YiG04" },
                7
            },
            new object[]
            {
                new string[] { "tzsHZHiU", "ZQFfAxBODxkK60" },
                14
            },
            new object[]
            {
                new string[] { "uQnO1q9roZ", "1oOw7np" },
                9
            },
            new object[]
            {
                new string[] { "Ppfvxhs", "eIu2x2m" },
                6
            },
            new object[]
            {
                new string[] { "7AcoYYp2IcPZE", "hq1G51qKapEWp" },
                13
            },
            new object[]
            {
                new string[] { "llsM3lrgXi", "s3XlsL5OlfmzZ1" },
                11
            },
            new object[]
            {
                new string[] { "AtVBrs", "bEbjZ3imy" },
                9
            },
            new object[]
            {
                new string[] { "oKxV", "JwjWNcanzPR" },
                11
            },
            new object[]
            {
                new string[] { "4EKNcPEEi1Fab", "CZsX" },
                13
            },
            new object[]
            {
                new string[] { "NZM3", "k3XPjpNHu" },
                9
            },
            new object[]
            {
                new string[] { "Codhp5IJ0", "SPz5P927" },
                9
            },
            new object[]
            {
                new string[] { "14N392TSkCl3", "uEyWaMll" },
                11
            },
            new object[]
            {
                new string[] { "CLpF0a", "pUk" },
                5
            },
            new object[]
            {
                new string[] { "O9M", "ubWtM" },
                4
            },
            new object[]
            {
                new string[] { "ql63d2w", "lMMy9BlHHhUf3" },
                12
            },
            new object[]
            {
                new string[] { "PBIfV40u90ag", "Ey4b2Api" },
                11
            },
            new object[]
            {
                new string[] { "xkIH6da", "lzNQVvyrKJsNY3" },
                14
            },
            new object[]
            {
                new string[] { "0fCPJeNpUE8", "DC99R8jKK3" },
                10
            },
            new object[]
            {
                new string[] { "ScVznclEA9sK", "TjN9Jm" },
                11
            },
            new object[]
            {
                new string[] { "1ccBZgl", "uswIZDlgAHsXk" },
                11
            },
            new object[]
            {
                new string[] { "mMm", "zJJbEkzLYUMhY" },
                12
            },
            new object[]
            {
                new string[] { "FT7FQK", "kPAkvw1MEfN" },
                11
            },
            new object[]
            {
                new string[] { "hXO5ZiAzMlIir", "dInrj" },
                12
            },
            new object[]
            {
                new string[] { "bDeLrRpy2LeCPb", "ZErT" },
                13
            }
        };


        public static PdfPoint[] NNData = new PdfPoint[]
        {
            new PdfPoint(82.45353838109239, 62.415005093558115),
            new PdfPoint(16.445674398013832, 7.051331644986569),
            new PdfPoint(35.583597244228336, 27.46872033901967),
            new PdfPoint(63.8245554804822, 44.89509346225664),
            new PdfPoint(0.7742372570967326, 6.938583013317256),
            new PdfPoint(65.40181734760978, 22.29324720161768),
            new PdfPoint(97.13960454465617, 50.25370334786503),
            new PdfPoint(19.15551535520754, 45.53805856543256),
            new PdfPoint(80.59123120177551, 25.51233282470693),
            new PdfPoint(5.021252133213605, 56.04912906205743),
            new PdfPoint(24.41810676553939, 79.31739454102991),
            new PdfPoint(98.12630738875605, 12.483472098628233),
            new PdfPoint(82.48631571672695, 29.34364176375367),
            new PdfPoint(35.803655214742406, 5.16089154047169),
            new PdfPoint(1.813800375443253, 47.255096977735214),
            new PdfPoint(80.11998397458856, 25.99984035749021),
            new PdfPoint(90.26397977468233, 88.93339150438577),
            new PdfPoint(8.254965696884042, 8.97868520394496),
            new PdfPoint(14.158071542303697, 98.52077265281578),
            new PdfPoint(70.71899728005727, 9.70650341683359),
            new PdfPoint(58.60508497220939, 69.22169822597527),
            new PdfPoint(15.143510163282482, 66.19892308162831),
            new PdfPoint(16.49098129875618, 61.44894011847811),
            new PdfPoint(59.31519405414486, 64.30374393065894),
            new PdfPoint(58.880198617023936, 69.74930498275906),
            new PdfPoint(58.78888045620321, 4.76405876739463),
            new PdfPoint(11.228694290441743, 12.860145308234605),
            new PdfPoint(80.62371302859762, 81.02375037506395),
            new PdfPoint(90.87481745321885, 8.048659530077462),
            new PdfPoint(86.97060905691454, 53.23733886383501),
            new PdfPoint(79.77968787046065, 62.69132229661655),
            new PdfPoint(97.45369858932968, 33.575350634376086),
            new PdfPoint(55.68259729639997, 78.53266468780453),
            new PdfPoint(84.80993603153726, 40.80973096746926),
            new PdfPoint(52.89633110070122, 15.424096971651757),
            new PdfPoint(31.112041569584935, 55.44209995586027),
            new PdfPoint(49.53804959253269, 92.63065004232082),
            new PdfPoint(92.45607820110665, 72.66951564303699),
            new PdfPoint(24.636942156010523, 22.044633809864933),
            new PdfPoint(99.76982890678676, 52.90800974490838),
            new PdfPoint(82.61099784649278, 17.85771383958713),
            new PdfPoint(74.16588992664359, 81.00550169213861),
            new PdfPoint(13.34483441571791, 47.0726836958395),
            new PdfPoint(47.945049322341525, 9.252548969452246),
            new PdfPoint(82.78544384909999, 85.53384162961818),
            new PdfPoint(86.41791572882465, 84.5461317010868),
            new PdfPoint(67.53711275495073, 90.39020510040851),
            new PdfPoint(62.56803790975437, 46.05914229645705),
            new PdfPoint(71.56130305322326, 8.098723357173876),
            new PdfPoint(37.970724110053844, 36.503310666941424),
            new PdfPoint(18.3788032374675, 19.84795034896214),
            new PdfPoint(18.13308334914272, 1.2881803099952127),
            new PdfPoint(81.60160120456186, 59.00242318333139),
            new PdfPoint(37.57869607184197, 27.967241358959505),
            new PdfPoint(97.7460348272766, 5.634112362720456),
            new PdfPoint(84.9666796464414, 68.61319827025679),
            new PdfPoint(29.725739779656745, 38.277277199189065),
            new PdfPoint(15.448731011261907, 30.373061794712797),
            new PdfPoint(70.09436264721477, 86.01779473250726),
            new PdfPoint(71.14819197800337, 52.17424240997747),
            new PdfPoint(43.017566199578106, 57.09185921458071),
            new PdfPoint(33.433656443618766, 3.2699185921492235),
            new PdfPoint(2.4884293540186175, 29.514037079380717),
            new PdfPoint(72.74747856539602, 44.441442049411116),
            new PdfPoint(15.264247773398054, 0.8939481426395335),
            new PdfPoint(82.27200991589356, 79.74763514660499),
            new PdfPoint(34.43836768761709, 85.52303143204219),
            new PdfPoint(91.90691599722378, 96.20420265233045),
            new PdfPoint(10.747687004702266, 72.62390777764313),
            new PdfPoint(18.204503055467892, 62.00619128580146),
            new PdfPoint(91.00755813085259, 81.62926984298593),
            new PdfPoint(52.97863363490906, 68.26721122337617),
            new PdfPoint(84.97188896260866, 40.483497230772926),
            new PdfPoint(82.04208148460329, 71.99786553392418),
            new PdfPoint(75.03458936225277, 45.61844875850991),
            new PdfPoint(62.777729239709636, 93.54972672515291),
            new PdfPoint(70.36073331446983, 3.9743344551363857),
            new PdfPoint(84.64548329605812, 44.580018552016185),
            new PdfPoint(44.866927314279856, 7.669932380951572),
            new PdfPoint(90.03637785608008, 39.71900281528301),
            new PdfPoint(63.98092485758994, 24.420561596263646),
            new PdfPoint(11.201209707090698, 49.55375920684947),
            new PdfPoint(99.66377946738517, 22.268044551668787),
            new PdfPoint(57.19140901930086, 6.016576988006017),
            new PdfPoint(42.195134616764996, 62.54652068319705),
            new PdfPoint(49.61310425442538, 20.010647167526496),
            new PdfPoint(52.44257355334966, 84.19422038812934),
            new PdfPoint(67.0752294529232, 39.24937886844233),
            new PdfPoint(43.03278016511083, 4.6357991376672185),
            new PdfPoint(49.42598643546282, 18.91930873569896),
            new PdfPoint(93.45285655237589, 26.040139241642603),
            new PdfPoint(99.36796037285181, 90.9895050206579),
            new PdfPoint(69.38884149074713, 6.0366785105100185),
            new PdfPoint(99.69679458529599, 47.806517636673476),
            new PdfPoint(80.69475374791655, 21.854199922464968),
            new PdfPoint(89.04717161055198, 88.20721990563409),
            new PdfPoint(46.898436066324166, 25.173429288152636),
            new PdfPoint(8.420107657979937, 68.0080815210619),
            new PdfPoint(28.000497306010118, 81.20161949340638),
            new PdfPoint(24.103817108644833, 21.163820177769633)
};

        public static IEnumerable<object[]> NNExpectedData => new[]
        {
            new object[]
            {
                new PdfPoint(87.37822238977932, 47.13424664374255),
                new object[]
                {
                    3.7405807168027154,
                    77,
                    new PdfPoint(84.64548329605812, 44.580018552016185),
                }
            },
            new object[]
            {
                new PdfPoint(74.5026032549824, 69.93356102115371),
                new object[]
                {
                    7.816974165006036,
                    73,
                    new PdfPoint(82.04208148460329, 71.99786553392418),
                }
            },
            new object[]
            {
                new PdfPoint(54.01419184925133, 71.12439211149801),
                new object[]
                {
                    3.039056340830242,
                    71,
                    new PdfPoint(52.97863363490906, 68.26721122337617),
                }
            },
            new object[]
            {
                new PdfPoint(53.56967860131475, 54.19173302307295),
                new object[]
                {
                    10.943391067925589,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(33.62320720050764, 38.388295379543614),
                new object[]
                {
                    3.899048259891558,
                    56,
                    new PdfPoint(29.725739779656745, 38.277277199189065),
                }
            },
            new object[]
            {
                new PdfPoint(67.71643075209577, 98.50616915055454),
                new object[]
                {
                    6.996934624874407,
                    75,
                    new PdfPoint(62.777729239709636, 93.54972672515291),
                }
            },
            new object[]
            {
                new PdfPoint(62.853776192101186, 77.58809088626217),
                new object[]
                {
                    7.233120102743402,
                    32,
                    new PdfPoint(55.68259729639997, 78.53266468780453),
                }
            },
            new object[]
            {
                new PdfPoint(39.1710541173474, 6.731437418177089),
                new object[]
                {
                    3.7156412263891623,
                    13,
                    new PdfPoint(35.803655214742406, 5.16089154047169),
                }
            },
            new object[]
            {
                new PdfPoint(9.500054562360727, 40.24933325499364),
                new object[]
                {
                    7.832014004033237,
                    42,
                    new PdfPoint(13.34483441571791, 47.0726836958395),
                }
            },
            new object[]
            {
                new PdfPoint(4.158440156246623, 15.800929441459854),
                new object[]
                {
                    7.657460730577243,
                    26,
                    new PdfPoint(11.228694290441743, 12.860145308234605),
                }
            },
            new object[]
            {
                new PdfPoint(70.38603008213099, 37.92398478562566),
                new object[]
                {
                    3.5662403566120062,
                    87,
                    new PdfPoint(67.0752294529232, 39.24937886844233),
                }
            },
            new object[]
            {
                new PdfPoint(36.49654657133572, 22.300307481532634),
                new object[]
                {
                    5.24842528186342,
                    2,
                    new PdfPoint(35.583597244228336, 27.46872033901967),
                }
            },
            new object[]
            {
                new PdfPoint(44.448096442616745, 76.71337511467348),
                new object[]
                {
                    10.948730989453496,
                    86,
                    new PdfPoint(52.44257355334966, 84.19422038812934),
                }
            },
            new object[]
            {
                new PdfPoint(18.520340417793502, 44.31476289468993),
                new object[]
                {
                    1.378368419246679,
                    7,
                    new PdfPoint(19.15551535520754, 45.53805856543256),
                }
            },
            new object[]
            {
                new PdfPoint(68.27767536726084, 94.51997472754229),
                new object[]
                {
                    4.195644188434987,
                    46,
                    new PdfPoint(67.53711275495073, 90.39020510040851),
                }
            },
            new object[]
            {
                new PdfPoint(80.9852186456766, 37.41169774270004),
                new object[]
                {
                    5.032841375488803,
                    72,
                    new PdfPoint(84.97188896260866, 40.483497230772926),
                }
            },
            new object[]
            {
                new PdfPoint(57.035762190811745, 39.26879178691382),
                new object[]
                {
                    8.758706221403711,
                    47,
                    new PdfPoint(62.56803790975437, 46.05914229645705),
                }
            },
            new object[]
            {
                new PdfPoint(12.085443471887913, 97.92593979377935),
                new object[]
                {
                    2.1562961875551574,
                    18,
                    new PdfPoint(14.158071542303697, 98.52077265281578),
                }
            },
            new object[]
            {
                new PdfPoint(77.27841905993205, 42.15685387387795),
                new object[]
                {
                    4.125216461895987,
                    74,
                    new PdfPoint(75.03458936225277, 45.61844875850991),
                }
            },
            new object[]
            {
                new PdfPoint(85.87212254856951, 56.063370792337665),
                new object[]
                {
                    3.032017326786329,
                    29,
                    new PdfPoint(86.97060905691454, 53.23733886383501),
                }
            },
            new object[]
            {
                new PdfPoint(12.121061998950344, 88.5888682638655),
                new object[]
                {
                    10.138645504748764,
                    18,
                    new PdfPoint(14.158071542303697, 98.52077265281578),
                }
            },
            new object[]
            {
                new PdfPoint(87.40498458296966, 51.58451776586178),
                new object[]
                {
                    1.7089469504759578,
                    29,
                    new PdfPoint(86.97060905691454, 53.23733886383501),
                }
            },
            new object[]
            {
                new PdfPoint(55.13592516333022, 41.86805042798852),
                new object[]
                {
                    8.532382488232894,
                    47,
                    new PdfPoint(62.56803790975437, 46.05914229645705),
                }
            },
            new object[]
            {
                new PdfPoint(46.67110223109417, 55.89363812932652),
                new object[]
                {
                    3.8450044606910225,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(16.092850368369838, 39.120936314989095),
                new object[]
                {
                    7.110511570818105,
                    7,
                    new PdfPoint(19.15551535520754, 45.53805856543256),
                }
            },
            new object[]
            {
                new PdfPoint(60.44407078486588, 51.23153354793123),
                new object[]
                {
                    5.591499584720878,
                    47,
                    new PdfPoint(62.56803790975437, 46.05914229645705),
                }
            },
            new object[]
            {
                new PdfPoint(16.3698062506329, 73.24470440615686),
                new object[]
                {
                    5.656289708761183,
                    68,
                    new PdfPoint(10.747687004702266, 72.62390777764313),
                }
            },
            new object[]
            {
                new PdfPoint(23.603385764313224, 35.368200010880244),
                new object[]
                {
                    6.7783441028566624,
                    56,
                    new PdfPoint(29.725739779656745, 38.277277199189065),
                }
            },
            new object[]
            {
                new PdfPoint(55.00466410944499, 87.18171359059261),
                new object[]
                {
                    3.9356605103079088,
                    86,
                    new PdfPoint(52.44257355334966, 84.19422038812934),
                }
            },
            new object[]
            {
                new PdfPoint(79.35386322733488, 71.45043817963591),
                new object[]
                {
                    2.7433909868872557,
                    73,
                    new PdfPoint(82.04208148460329, 71.99786553392418),
                }
            },
            new object[]
            {
                new PdfPoint(92.04745240854216, 81.04432394243022),
                new object[]
                {
                    1.193122715963635,
                    70,
                    new PdfPoint(91.00755813085259, 81.62926984298593),
                }
            },
            new object[]
            {
                new PdfPoint(38.38165092946303, 48.26803735488079),
                new object[]
                {
                    9.967524396930479,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(76.69366761932686, 86.37384253935019),
                new object[]
                {
                    5.9336956035398005,
                    41,
                    new PdfPoint(74.16588992664359, 81.00550169213861),
                }
            },
            new object[]
            {
                new PdfPoint(26.857001817848914, 72.32337753974622),
                new object[]
                {
                    7.407056290485798,
                    10,
                    new PdfPoint(24.41810676553939, 79.31739454102991),
                }
            },
            new object[]
            {
                new PdfPoint(67.72139867299835, 92.06400298246639),
                new object[]
                {
                    1.6839123045966824,
                    46,
                    new PdfPoint(67.53711275495073, 90.39020510040851),
                }
            },
            new object[]
            {
                new PdfPoint(60.07059131774799, 65.14826966545107),
                new object[]
                {
                    1.1330704932109386,
                    23,
                    new PdfPoint(59.31519405414486, 64.30374393065894),
                }
            },
            new object[]
            {
                new PdfPoint(98.18469148101073, 19.636669855162936),
                new object[]
                {
                    3.018581465663707,
                    82,
                    new PdfPoint(99.66377946738517, 22.268044551668787),
                }
            },
            new object[]
            {
                new PdfPoint(13.315505500931046, 2.219169876084226),
                new object[]
                {
                    2.3566520929687598,
                    64,
                    new PdfPoint(15.264247773398054, 0.8939481426395335),
                }
            },
            new object[]
            {
                new PdfPoint(9.499232323084716, 53.073137917110024),
                new object[]
                {
                    3.9093162473638645,
                    81,
                    new PdfPoint(11.201209707090698, 49.55375920684947),
                }
            },
            new object[]
            {
                new PdfPoint(68.33664969059441, 84.3521765566152),
                new object[]
                {
                    2.4215364431973803,
                    58,
                    new PdfPoint(70.09436264721477, 86.01779473250726),
                }
            },
            new object[]
            {
                new PdfPoint(68.17553361331473, 88.07665773162144),
                new object[]
                {
                    2.4000172124415697,
                    46,
                    new PdfPoint(67.53711275495073, 90.39020510040851),
                }
            },
            new object[]
            {
                new PdfPoint(49.166278548969665, 1.397572786085366),
                new object[]
                {
                    6.93584258247533,
                    88,
                    new PdfPoint(43.03278016511083, 4.6357991376672185),
                }
            },
            new object[]
            {
                new PdfPoint(24.727638210913018, 32.081396611116276),
                new object[]
                {
                    7.960524829000644,
                    56,
                    new PdfPoint(29.725739779656745, 38.277277199189065),
                }
            },
            new object[]
            {
                new PdfPoint(88.42089809955208, 39.026696182483356),
                new object[]
                {
                    1.7575731329222621,
                    79,
                    new PdfPoint(90.03637785608008, 39.71900281528301),
                }
            },
            new object[]
            {
                new PdfPoint(51.42556152624328, 15.448878446223556),
                new object[]
                {
                    1.470978335201828,
                    34,
                    new PdfPoint(52.89633110070122, 15.424096971651757),
                }
            },
            new object[]
            {
                new PdfPoint(19.693229959708034, 2.7893290005286175),
                new object[]
                {
                    2.1650646266448024,
                    51,
                    new PdfPoint(18.13308334914272, 1.2881803099952127),
                }
            },
            new object[]
            {
                new PdfPoint(9.279840978602271, 29.123265376879715),
                new object[]
                {
                    6.294219198683488,
                    57,
                    new PdfPoint(15.448731011261907, 30.373061794712797),
                }
            },
            new object[]
            {
                new PdfPoint(78.20191411050928, 81.43682258294183),
                new object[]
                {
                    2.4567740328680956,
                    27,
                    new PdfPoint(80.62371302859762, 81.02375037506395),
                }
            },
            new object[]
            {
                new PdfPoint(40.537261184519394, 72.9327512887614),
                new object[]
                {
                    10.517715080249477,
                    84,
                    new PdfPoint(42.195134616764996, 62.54652068319705),
                }
            },
            new object[]
            {
                new PdfPoint(7.386788690671264, 3.4978575051093697),
                new object[]
                {
                    5.549162421342523,
                    17,
                    new PdfPoint(8.254965696884042, 8.97868520394496),
                }
            },
            new object[]
            {
                new PdfPoint(26.05756081867855, 84.20846377940514),
                new object[]
                {
                    3.579960160958175,
                    98,
                    new PdfPoint(28.000497306010118, 81.20161949340638),
                }
            },
            new object[]
            {
                new PdfPoint(74.3139313663137, 31.084939962251912),
                new object[]
                {
                    7.718062249062456,
                    15,
                    new PdfPoint(80.11998397458856, 25.99984035749021),
                }
            },
            new object[]
            {
                new PdfPoint(27.08914433160744, 37.16399756733006),
                new object[]
                {
                    2.8619970467116924,
                    56,
                    new PdfPoint(29.725739779656745, 38.277277199189065),
                }
            },
            new object[]
            {
                new PdfPoint(70.85333147347784, 5.242611226453819),
                new object[]
                {
                    1.3605803595971302,
                    76,
                    new PdfPoint(70.36073331446983, 3.9743344551363857),
                }
            },
            new object[]
            {
                new PdfPoint(51.77204458863274, 52.932206910888034),
                new object[]
                {
                    9.69245062675278,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(13.471218812546915, 11.31698816247696),
                new object[]
                {
                    2.7221774756150476,
                    26,
                    new PdfPoint(11.228694290441743, 12.860145308234605),
                }
            },
            new object[]
            {
                new PdfPoint(23.382642351306295, 64.21491294035737),
                new object[]
                {
                    5.629527326020367,
                    69,
                    new PdfPoint(18.204503055467892, 62.00619128580146),
                }
            },
            new object[]
            {
                new PdfPoint(21.987233262429573, 11.042886413409592),
                new object[]
                {
                    6.829449766789799,
                    1,
                    new PdfPoint(16.445674398013832, 7.051331644986569),
                }
            },
            new object[]
            {
                new PdfPoint(44.65334716075204, 56.72809804882697),
                new object[]
                {
                    1.6757391022022616,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(14.413577866791204, 65.20588702038663),
                new object[]
                {
                    1.2324454456029377,
                    21,
                    new PdfPoint(15.143510163282482, 66.19892308162831),
                }
            },
            new object[]
            {
                new PdfPoint(1.496525343024535, 34.243471455041515),
                new object[]
                {
                    4.83233101936407,
                    62,
                    new PdfPoint(2.4884293540186175, 29.514037079380717),
                }
            },
            new object[]
            {
                new PdfPoint(60.37475135874306, 86.38587789183474),
                new object[]
                {
                    7.556125515305361,
                    75,
                    new PdfPoint(62.777729239709636, 93.54972672515291),
                }
            },
            new object[]
            {
                new PdfPoint(87.96474891454915, 60.71664437764912),
                new object[]
                {
                    5.766963730198733,
                    0,
                    new PdfPoint(82.45353838109239, 62.415005093558115),
                }
            },
            new object[]
            {
                new PdfPoint(93.90443153077325, 3.5656814220870303),
                new object[]
                {
                    4.363063424232462,
                    54,
                    new PdfPoint(97.7460348272766, 5.634112362720456),
                }
            },
            new object[]
            {
                new PdfPoint(56.99120651646804, 81.00351342714225),
                new object[]
                {
                    2.7959884805796307,
                    32,
                    new PdfPoint(55.68259729639997, 78.53266468780453),
                }
            },
            new object[]
            {
                new PdfPoint(76.89422069517484, 54.17932624450519),
                new object[]
                {
                    6.085820174967678,
                    59,
                    new PdfPoint(71.14819197800337, 52.17424240997747),
                }
            },
            new object[]
            {
                new PdfPoint(63.45013931565355, 80.49930589119406),
                new object[]
                {
                    8.012639180927806,
                    32,
                    new PdfPoint(55.68259729639997, 78.53266468780453),
                }
            },
            new object[]
            {
                new PdfPoint(31.33405794501082, 30.022880285076926),
                new object[]
                {
                    4.958055796946755,
                    2,
                    new PdfPoint(35.583597244228336, 27.46872033901967),
                }
            },
            new object[]
            {
                new PdfPoint(59.209873769066554, 46.30109565207685),
                new object[]
                {
                    3.366869142407712,
                    47,
                    new PdfPoint(62.56803790975437, 46.05914229645705),
                }
            },
            new object[]
            {
                new PdfPoint(78.79398195705156, 78.45536064489083),
                new object[]
                {
                    3.153496725896489,
                    27,
                    new PdfPoint(80.62371302859762, 81.02375037506395),
                }
            },
            new object[]
            {
                new PdfPoint(85.57104507254752, 24.654183310002807),
                new object[]
                {
                    5.053213509947922,
                    8,
                    new PdfPoint(80.59123120177551, 25.51233282470693),
                }
            },
            new object[]
            {
                new PdfPoint(78.95708936964519, 12.704872047938153),
                new object[]
                {
                    6.31686834491134,
                    40,
                    new PdfPoint(82.61099784649278, 17.85771383958713),
                }
            },
            new object[]
            {
                new PdfPoint(13.174935980071456, 88.82914034992214),
                new object[]
                {
                    9.741370141218182,
                    18,
                    new PdfPoint(14.158071542303697, 98.52077265281578),
                }
            },
            new object[]
            {
                new PdfPoint(55.623046798666124, 96.84465577887713),
                new object[]
                {
                    7.4016913841622145,
                    36,
                    new PdfPoint(49.53804959253269, 92.63065004232082),
                }
            },
            new object[]
            {
                new PdfPoint(8.430144926873329, 97.99469494927773),
                new object[]
                {
                    5.75203451501427,
                    18,
                    new PdfPoint(14.158071542303697, 98.52077265281578),
                }
            },
            new object[]
            {
                new PdfPoint(43.22581030476383, 49.88363608992273),
                new object[]
                {
                    7.211230562268732,
                    60,
                    new PdfPoint(43.017566199578106, 57.09185921458071),
                }
            },
            new object[]
            {
                new PdfPoint(52.462469277256375, 74.30081146714733),
                new object[]
                {
                    5.317688044710818,
                    32,
                    new PdfPoint(55.68259729639997, 78.53266468780453),
                }
            },
            new object[]
            {
                new PdfPoint(2.0752344418159763, 84.50188522953496),
                new object[]
                {
                    14.707065710166793,
                    68,
                    new PdfPoint(10.747687004702266, 72.62390777764313),
                }
            },
            new object[]
            {
                new PdfPoint(87.72047866413772, 86.93785567990162),
                new object[]
                {
                    1.8361371712469572,
                    95,
                    new PdfPoint(89.04717161055198, 88.20721990563409),
                }
            },
            new object[]
            {
                new PdfPoint(85.69225991285919, 6.507776800176323),
                new object[]
                {
                    5.40677558683976,
                    28,
                    new PdfPoint(90.87481745321885, 8.048659530077462),
                }
            },
            new object[]
            {
                new PdfPoint(95.701988137853, 51.80572553493597),
                new object[]
                {
                    2.11554101881059,
                    6,
                    new PdfPoint(97.13960454465617, 50.25370334786503),
                }
            },
            new object[]
            {
                new PdfPoint(77.4844196684514, 50.073882954946704),
                new object[]
                {
                    5.084541514035221,
                    74,
                    new PdfPoint(75.03458936225277, 45.61844875850991),
                }
            },
            new object[]
            {
                new PdfPoint(93.83858926824583, 78.54914176983279),
                new object[]
                {
                    4.183530356997088,
                    70,
                    new PdfPoint(91.00755813085259, 81.62926984298593),
                }
            },
            new object[]
            {
                new PdfPoint(69.60341179436881, 2.118953273473234),
                new object[]
                {
                    2.003989823845886,
                    76,
                    new PdfPoint(70.36073331446983, 3.9743344551363857),
                }
            },
            new object[]
            {
                new PdfPoint(21.036323077268815, 30.797805649614528),
                new object[]
                {
                    5.603712380054862,
                    57,
                    new PdfPoint(15.448731011261907, 30.373061794712797),
                }
            },
            new object[]
            {
                new PdfPoint(67.01310772132939, 11.758224733999745),
                new object[]
                {
                    4.235938831569964,
                    19,
                    new PdfPoint(70.71899728005727, 9.70650341683359),
                }
            },
            new object[]
            {
                new PdfPoint(58.40755345770724, 54.22645743167164),
                new object[]
                {
                    9.16595152690823,
                    47,
                    new PdfPoint(62.56803790975437, 46.05914229645705),
                }
            },
            new object[]
            {
                new PdfPoint(49.248852518964966, 70.66641193673007),
                new object[]
                {
                    4.434797767182969,
                    71,
                    new PdfPoint(52.97863363490906, 68.26721122337617),
                }
            },
            new object[]
            {
                new PdfPoint(2.7054302324065804, 31.088830779825305),
                new object[]
                {
                    1.5896743629376124,
                    62,
                    new PdfPoint(2.4884293540186175, 29.514037079380717),
                }
            },
            new object[]
            {
                new PdfPoint(30.842485871231062, 31.67560039456263),
                new object[]
                {
                    6.3384522442698294,
                    2,
                    new PdfPoint(35.583597244228336, 27.46872033901967),
                }
            },
            new object[]
            {
                new PdfPoint(55.56502506452341, 65.54856266577112),
                new object[]
                {
                    3.75239531592163,
                    71,
                    new PdfPoint(52.97863363490906, 68.26721122337617),
                }
            },
            new object[]
            {
                new PdfPoint(1.267016931392484, 79.30364358908852),
                new object[]
                {
                    11.59749867642406,
                    68,
                    new PdfPoint(10.747687004702266, 72.62390777764313),
                }
            },
            new object[]
            {
                new PdfPoint(85.80159109593838, 72.9274073673635),
                new object[]
                {
                    3.8727200438238047,
                    73,
                    new PdfPoint(82.04208148460329, 71.99786553392418),
                }
            },
            new object[]
            {
                new PdfPoint(31.687705038346536, 73.64980455511628),
                new object[]
                {
                    8.403892534033446,
                    98,
                    new PdfPoint(28.000497306010118, 81.20161949340638),
                }
            },
            new object[]
            {
                new PdfPoint(9.155398598534447, 51.101027419495416),
                new object[]
                {
                    2.565030606787517,
                    81,
                    new PdfPoint(11.201209707090698, 49.55375920684947),
                }
            },
            new object[]
            {
                new PdfPoint(95.78765937402926, 29.508025935639814),
                new object[]
                {
                    4.180615066997134,
                    90,
                    new PdfPoint(93.45285655237589, 26.040139241642603),
                }
            },
            new object[]
            {
                new PdfPoint(67.92396367960997, 22.903155180355462),
                new object[]
                {
                    2.5948429360078844,
                    5,
                    new PdfPoint(65.40181734760978, 22.29324720161768),
                }
            },
            new object[]
            {
                new PdfPoint(38.49112754016583, 70.52567748005846),
                new object[]
                {
                    8.79696604588175,
                    84,
                    new PdfPoint(42.195134616764996, 62.54652068319705),
                }
            },
            new object[]
            {
                new PdfPoint(59.65725942551804, 65.37065649962103),
                new object[]
                {
                    1.120406688708154,
                    23,
                    new PdfPoint(59.31519405414486, 64.30374393065894),
                }
            },
            new object[]
            {
                new PdfPoint(45.15904139251526, 74.24820871457037),
                new object[]
                {
                    9.844711972778917,
                    71,
                    new PdfPoint(52.97863363490906, 68.26721122337617),
                }
            }
        };
        #endregion

        [Theory]
        [MemberData(nameof(EuclidianData))]
        public void Euclidian(PdfPoint[] points, double expected)
        {
            Assert.Equal(expected, Distances.Euclidean(points[0], points[1]), PreciseDoubleComparer);
        }

        [Theory]
        [MemberData(nameof(WeightedEuclideanData))]
        public void WeightedEuclidean(PdfPoint[] points, double[] weights, double expected)
        {
            Assert.Equal(expected, Distances.WeightedEuclidean(points[0], points[1], weights[0], weights[1]), PreciseDoubleComparer);
        }

        [Theory]
        [MemberData(nameof(ManhattanData))]
        public void Manhattan(PdfPoint[] points, double expected)
        {
            Assert.Equal(expected, Distances.Manhattan(points[0], points[1]), PreciseDoubleComparer);
        }

        [Theory]
        [MemberData(nameof(MinimumEditDistanceData))]
        public void MinimumEditDistance(string[] strings, int expected)
        {
            Assert.Equal(expected, Distances.MinimumEditDistance(strings[0], strings[1]));
        }

        [Theory]
        [MemberData(nameof(NNExpectedData))]
        public void FindIndexNearest(PdfPoint point, object[] expected)
        {
            var expectedDistance = (double)expected[0];
            var expectedIndex = (int)expected[1];

            var nn = Distances.FindIndexNearest(point, NNData, p => p, p => p, Distances.Euclidean, out double distance);

            Assert.Equal(expectedIndex, nn);
            Assert.Equal(expectedDistance, distance, PreciseDoubleComparer);
        }
    }
}
